// 包名与模块引入
package com.example.coffee.provider;
import com.example.coffee.ResourceTable;
import com.example.coffee.items.IndexBarItem;
import ohos.agp.components.*;
import ohos.agp.components.element.ShapeElement;
import ohos.agp.utils.Color;
import ohos.app.Context;
import java.util.List;
// 类实现
public class IndexBarDataProvider extends BaseItemProvider {
    // 列表项数据源
    private List<IndexBarItem> dataList;
    // Context实例
    private Context context;
    // 自定义构造方法，传入数据源和Context
    public IndexBarDataProvider(List<IndexBarItem> dataList, Context context) {
        this.dataList = dataList;
        this.context = context;
    }
    // 列表项个数
    @Override
    public int getCount() {
        return dataList == null ? 0 : dataList.size();
    }
    // 列表项数据
    @Override
    public Object getItem(int position) {
        if (dataList != null && position >= 0 && position < dataList.size()){
            return dataList.get(position);
        }
        return null;
    }
    // 列表项标识
    @Override
    public long getItemId(int i) {
        return i;
    }
    // 组件与数据绑定
    @Override
    public Component getComponent(int position, Component convertComponent, ComponentContainer componentContainer) {
        final Component cpt;
        // 获取组件
        if (convertComponent == null) {
            cpt = LayoutScatter.getInstance(context).parse(ResourceTable.Layout_list_index_bar, null, false);
        } else {
            cpt = convertComponent;
        }
        // 获取数据模型
        IndexBarItem sampleItem = dataList.get(position);
        // 获取组件中的文本组件
        Text text = (Text) cpt.findComponentById(ResourceTable.Id_text);
        // 根据选中状态来设置文本和背景颜色
        if (sampleItem.isSelected()) {
            text.setTextColor(Color.BLUE);
            text.setBackground(new ShapeElement(context, ResourceTable.Graphic_background_index_bar_item));
        } else {
            text.setTextColor(Color.BLACK);
            text.setBackground(null);
        }
        // 设置类别名称
        text.setText(sampleItem.getName());
        return cpt;
    }
}
